<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>


    <script>
        // let a = [100, 200]
        // let b = a;
        // b[0] = 10000;
        // console.log(a);
        // 引用数据类型才会出现这个浅拷贝的问题
        // 浅拷贝  当一个引用数据类型  赋值给另一个变量时 赋值的其实是地址 而不是在内存中开辟新的空间，这就导致了一方修改  另一方也会修改
        // 深拷贝  在堆内存中开辟一个新的空间 用来存放数据  拷贝与被拷贝的对象不会产生影响
        // 深拷贝的方法  递归  遍历

        // let one = [11, 233, 44]
        // let two = JSON.stringify(one)
        // let three = JSON.parse(two)//将字符串转换为数组  该方法会帮我们在堆内存 开辟新的空间
        // 利用方法能返回新对象或新数组的功能 让他帮我们深拷贝

        // console.log(three);
        // three[0] = 1000000
        // console.log(one);
        // 上面这么写方法  也有弊端  如果你用它拷贝对象  如果对象中右边属性值 有函数 undefined 或者日期对象 就会出现问题  函数 和 undefined 会消失 日期对象会变成字符串





        // 通过递归来进行深拷贝
        // function cloneArr(a) {
        //     let arr = []
        //     for (let i = 0; i < a.length; i++) {
        //         arr[i] = a[i]
        //         arr[i] = Array(a[i])?cloneArr(a[i]):a[i]//可以防止多维数组
        //     }
        //     return arr
        // }
        let obj1 = {
            age: 1222,
            sex: {
                one: 111
            }
        }

        function deepCopy(copyObj) {
            let obj;
            if (Array.isArray(copyObj)) {
                obj = [];
                for (let i = 0; i < array.length; i++) {
                    obj[i] = deepCopy(copyObj);
                }
                return obj;
            } else if (typeof (copyObj) == "object") {
                obj = {};
                for (let i in copyObj) {
                    obj[x] = deepCopy(copyObj);
                }
                return obj;
            } else {
                return copyObj;
            }

        }

        // function cloneObj(b) {
        //     let obj = {}
        //     for (let i in b) {
        //         obj[i] = typeof (b[i]) == "object" ? cloneObj(b[i]) : b[i]
        //     }
        //     return obj;
        // }
        // let obj2 = cloneObj(obj1)
        // console.log(obj2);

        //深度拷贝
        let a = structuredClone(obj1)
        console.log(a);



    </script>
</body>

</html>